﻿// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/Light/HalfLambertDiffuseLight"
{
	Properties
	{
		_Diffuse("Diffuse",Color)=(1,1,1,1)
	}
	SubShader
	{
		Tags { "RenderType"="Opaque" }
		LOD 100

		Pass
		{
			Tags { "LightMode" = "ForwardBase" }
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			
			#include "UnityCG.cginc"
			#include "Lighting.cginc"

			struct a2v
			{
				float4 vertex : POSITION;
				float2 normal : NORMAL;
			};

			struct v2f
			{
				float4 pos:SV_Position;
				fixed3 worldNormal:TEXCOORD0;
			};

			float4 _Diffuse;
			
			v2f vert (a2v v)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(v.vertex);

				o.worldNormal=mul(v.normal,(float3x3)unity_WorldToObject);

				return o;
			}
			
			fixed4 frag (v2f i) : SV_Target
			{
				fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

				fixed3 worldNormal=i.worldNormal;
				
				fixed3 worldLightDir=_WorldSpaceLightPos0.xyz;

				fixed halfLambert=dot(worldNormal,worldLightDir) *0.5 + 0.5;

				fixed3 diffuse= _LightColor0.rgb * _Diffuse.rgb *halfLambert;

				fixed3 color=ambient+diffuse;

				return fixed4(color,1.0);
			}
			ENDCG
		}
	}
}
